perm filename ARMSW[SYS,HE]6 blob
sn#022523 filedate 1973-02-05 generic text, type T, neo UTF8
00100 IFN USER+TRACK,<0>
00200 STRADR: MOVE BITSAV ;Enters here every 1/60 th. seccond
00300 IFE USER+TRACK,<
00400 TRNE DTST
00500 CALLI 400024
00600 DATAO ARM,[2]
00700 SOSLE STWT
00800 CALLI 400024
00900 >
01000 MOVE P,[XWD -PDLL,PDL] ;PUSH DOWN STACK
01100 MOVE CBUF,CBUFS
01200 MOVE DATWD,DATWDS
01300 IORI DATWD,2 ;YELLOW ARM
01400 IFN REPORT+TRACK,<
01500 MOVE DATA,DATPT
01600 >
01700 IFN USER+TRACK,<
01800 TRNE DTST
01900 JRST SWDONE
02000 >
02100 IFE USER,<
02200 IFN TRACK,<
02300 SKIPE WALK
02400 JRST NCHK
02500 >
02600 CONSZ 40 ;CHECK TO SEE IF ON PDP-6
02700 JRST[ MOVEI TAC,PDPERR
02800 MOVEM TAC,TRAJER
02900 JRST TOFF]
03000 ; CONO 4,400 ;TURN OFF THE PI'S
03100 CONI 0,AC ;SET PROCESSOR FLAGS
03200 ANDI AC,7
03300 CONO 0,2050(AC)
03400 TRZE TRIP ;TURN ON ARM
03500 DATAO ARM,[3]
03600 >
03700 NCHK:
03800 MOVEI K,51B23 ;-10 VOLT REFERENCE
03900 IFE USER,<PUSHJ P,PREAD ;REFTR← -10 volt reference
04000 LDB AC,SNUM ;PICK UP MIDDLE SAMPLE
04100 ANDI DACVAL,7777 ;LEAVE LAST SAMPLE IN J
04200 ADDI AC,(DACVAL) ;ADD THEM TOGETHER
04300 >
04400 IFN USER,<MOVEI AC,17770>
04500 CAIGE AC,17000 ;IS THE FUSE BLOWN
04600 JRST[ MOVEI TAC,REFERR
04700 MOVEM TAC,TRAJER
04800 JRST TOFF]
04900 MOVEM AC,REFTR ;REFERENCE READING
05000 IFN TRACK,<
05100 SKIPE WALK
05200 JRST TOK
05300 >
05400 IFE USER,<
05500 CONI CLOCK,AC
05600 TLZ AC,777774
05700 JRST STIME ;TIME IN MICRO SECONDS
05800 >
05900 IFN USER,<JRST .+2>
00100 NXTJIF:
00200 IFN USER,<JRST SWDONE>
00300 IFN DEB<
00400 MOVEM 17,ACSAV+17
00500 MOVEI 17,ACSAV
00600 BLT 17,ACSAV+16
00700 MOVE 17,ACSAV+17
00800 >
00900 IFN TRACK,<
01000 SKIPE WALK
01100 JRST TOK
01200 >
01300 IFN REPORT+TRACK,<
01400 HRRZI TAC,(DATA)
01500 CAIL TAC,DATO+DBL-1
01600 JRST[ SUB DATA,[XWD DBL,DBL]
01700 MOVE TAC,[XWD DATO+DBL,DATO]
01800 BLT TAC,(DATA)
01900 HRRZI AC,(DATA)
02000 HRRZ TAC,DATIWD
02100 SUBI AC,(TAC)
02200 JRST RDP]
02300 HRRZI AC,(DATA)
02400 HRRZ TAC,DATIWD
02500 SUBI AC,(TAC)
02600 HRRZ MQ,DATPT
02700 SUBI TAC,(MQ)
02800 IMUL AC,TAC
02900 RDP: SKIPLE AC
03000 IFN TRACK,<PUSH DATA,[0]>
03100 IFN REPORT,<PUSH DATA,[SIXBIT/ERROR/]>
03200 MOVEI AC,DATO-1
03300 HRRZ TAC,DATIWD
03400 CAIL TAC,DATO+DBL-1
03500 HRRM AC,DATIWD
03600 MOVEM DATA,DATPT
03700 >
03800 IFE USER,<
03900 MOVEI TAC,=2000
00100 WATSTL: CONI CLOCK,AC
00200 TLZ AC,777774
00300 SUB AC,LTIME
00400 JUMPGE AC,.+2
00500 ADD AC,[=1000000]
00600 IFN REPORT,<
00700 CAIN TAC,=2000
00800 JRST[ PUSH DATA,[<SIXBIT/TICK/>+1]
00900 HRRZ MQ,DATIWD
01000 PUSH DATA,MQ
01100 JRST .+1]
01200 >
01300 MOVEM AC,ETIME
01400 TRNE RUN
01500 JRST[ MOVE MQ,AC
01600 FSC MQ,233
01700 FMPR MQ,[0.00006]
01800 MOVEM MQ,TDF
01900 MOVE AC,LTIME
02000 ADD AC,ETIME
02100 JRST SSTIME]
02200 CAIGE AC,=16667 ;delta T greater than 16.7 msec.?
02300 SOJGE TAC,WATSTL
02400 JUMPL TAC,TE
02500 CAIL AC,=19000
02600 JRST[ MOVEI TAC,ISERR
02700 MOVEM TAC,TRAJER
02800 JRST TOFF]
02900 MOVSI AC,(1.0)
03000 MOVEM AC,TDF
03100 MOVE AC,LTIME
03200 ADDI AC,=16667
03300 SSTIME: TLNE AC,777774
03400 SUB AC,[=1000000]
03500 STIME: MOVEM AC,LTIME ;LTIME←LTIME+16.7 msec.
03600 >
03700 IFN USER,<
03800 MOVEI AC,=8888
03900 MOVEM AC,ETIME
04000 MOVSI AC,(0.5)
04100 MOVEM AC,TDF
04200 >
04300 SOSGE COUNT
04400 JRST[TE:MOVEI AC,TERR
04500 MOVEM AC,TRAJER
04600 JRST ZITO]
04700 IFN ADJUST,<
04800 MOVEI K,14B23
04900 MOVEM BITSAV
05000 MOVEI I,2
05100 RNP: PUSHJ P,PREAD
05200 LDB AC,SNUM
05300 FSC AC,221
05400 JSA 16,EXP
05500 JUMP AC
05600 FMPR [0.15]
05700 MOVEM FACTOR(I)
05800 SOJGE I,RNP
05900 MOVE BITSAV
06000 MOVE I,ADJI
06100 JUMPL I,MAIN
06200 IFN ADJG,<
06300 MOVE AC,ADJE
06400 FMPR AC,FACTOR
06500 MOVEM AC,KE(I) ;POT 12
06600 MOVE AC,ADJV
06700 FMPR AC,FACTOR+1
06800 MOVEM AC,KV(I) ;POT 13
06900 MOVE AC,ADJIF
07000 FMPR AC,FACTOR+2
07100 MOVEM AC,KI(I) ;POT 14
07200 >
07300 IFN ADJD,<
07400 MOVE AC,ADJE
07500 FMPR AC,FACTOR
07600 MOVEM AC,KM(I) ;POT 12
07700 MOVE AC,ADJV
07800 FMPR AC,FACTOR+1
07900 MOVEM AC,PK(I) ;POT 13
08000 >
08100 >
00100 MAIN: TRNE RUN
00200 JRST[ PUSHJ P,EVAL
00300 PUSHJ P,NXTH
00400 JRST .+1]
00500 MOVEI J,6
00600 PUSHJ P,ANGLES ;read joint angles
00700 TRNE RONLY ;read angles only?
00800 JRST[ PUSHJ P,HEAD ;read hand also
00900 MOVE AC,HAND
01000 MOVEM AC,SET
01100 PUSHJ P,REFLEX
01200 PUSHJ P,READED] ;DOES NOT RETURN
01300 TRNN RUN
01400 JRST[ SKIPGE TAC,FUNCT ;not run, mabye a function
01500 JRST[ PUSHJ P,SETSET
01600 JRST NEXT]
01700 JUMPE TAC,[CAIL CBUF,BUF;try next buffer
01800 SETOM (CBUF) ;dont do this if first buffer
01900 MOVEM CBUF,CBUFS
02000 ADDI CBUF,1001
02100 CAILE CBUF,BUF2
02200 MOVEI CBUF,BUF ;Advance buffer
02300 MOVE 2,(CBUF)
02400 JUMPL 2,[BUFWT:MOVE CBUF,CBUFS;wait for buffer
02500 JRST SWDONE]
02600 JUMPN 2,BUFRDY ;the last buffer stop.
02700 JRST[ TRO DTST
02800 MOVEI 2,WAITIN
02900 HRRM 2,JUMPBK
03000 MOVEM 2,STKPTR
03100 IFN REPORT,<PUSH DATA,[0]>
03200 JRST BUFWT]
03300 BUFRDY: HRRZ 2,(CBUF)
03400 ADDI 2,-1(CBUF)
03500 HRRZM 2,STKPTR
03600 JRST NEXT]
03700 CAIN TAC,6
03800 JRST SETCH
03900 JRST TT] ;otherwise perform function
04000 JUMPE J,[RUDONE:TRZ DROP+RUN+FINAL+WOB ;if J is zero then end of run
04100 TDZ DATWD,[770001252500]
04200 PUSHJ P,SETSET
04300 TRZE STP
04400 JRST[ MOVEI TAC,STPERR
04500 MOVEM TAC,TRAJER
04600 POP P,TAC
04700 JRST TOFF]
04800 JRST NEXT]
00100 TT: PUSHJ P,REFLEX
00200 DISP: MOVE AC,FUNCT
00300 CAILE AC,MAXFN
00400 JRST NEXT
00500 JRST @.+1(AC) ;Perform function
00600 NXTJIF ;0
00700 HOPEN ;1
00800 HCLOSE ;2
00900 NXTJIF ;3
01000 PLACE ;4
01100 NUDGE ;5
01200 SETCH ;6
01300 STOP ;7
01400 SAVE ;10
01500 RESTORE ;11
01600 CENTER ;12
01700 SET.ARM ;13 SET_ARM
01800 WOBBLE ;14
01900 SEARCH ;15
02000 AOJI ;16
02100 SLAVE ;17
02200
02300 XLIST
02400 SUBTTL SPACEWAR CODE ANGLE MEASUREMENT LOU PAUL
02500 LIST
00100 ANGLES: MOVEI I,5
00200 JFCL 10,.+1
00300 MOVE TAC,[XWD TH,THP]
00400 BLT TAC,THP+5
00500 MOVEI L,10
00600 IFN REPORT,<PUSH DATA,[<SIXBIT/THETA/>+6]>
00700 SETCHA: MOVEI K,CHA
00800 TRNE ALT6
00900 MOVEI K,N6CHA
01000 SKIPA
01100 RSTRT: MOVE K,CHAN(I)
01200 SOJL L,REDER
01300 IFE USER,<
01400 PUSHJ P,PREAD
01500 LDB AC,SNUM
01600 CAIN I,5
01700 JRST[ TRNE POTREAD
01800 JRST .+1
01900 CAIL AC,1000
02000 CAILE AC,7000
02100 JRST[ TRC ALT6
02200 JRST SETCHA]
02300 MOVEI K,CHA5
02400 JRST .+1]
02500 ANDI DACVAL,7777
02600 ADDI AC,(DACVAL)
02700 SETZ TAC,
02800 DIV AC,REFTR
02900 ASH AC,-26
03000 MOVE TAC1,AC
03100 TRNE POTREAD
03200 JRST[ ADDI TAC1,=1000
03300 JRST EXON]
03400 ASHC AC,-11 ;LEAVE INDEX INTO NON-LINEAR DIFF TABLE IN AC
03500 LDB MQ,NON(I) ;GET LOWER DIFF
03600 ADDI TAC1,(MQ) ;ADD IT TO READING
03700 AOJ AC,
03800 LDB AC,NON(I) ;GET UPPER DIFFERENCE
03900 SUBI AC,(MQ)
04000 MUL TAC,AC ;INTERPOLATE
04100 ADD TAC1,TAC ;CORRECTED READING
04200 FSC TAC1,226 ;FLOAT
04300 FMPR TAC1,SCALE(I)
04400 FADR TAC1,OFF(I)
04500 >
04600 IFN USER,<
04700 MOVE TAC1,ERR(I)
04800 FSC TAC1,-1
04900 FADR TAC1,T0(I)
05000 >
05100 CAIN I,5
05200 JRST[ TRNE ALT6
05300 FADR TAC1,OFF6
05400 FADR TAC1,ROT6
05500 MOVEM TAC1,TH+5
05600 FSBR TAC1,T0+5
05700 MOVSI MQ,(180.0)
05800 CAML TAC1,MQ
05900 JRST[ INCROT: MOVN MQ,MQ
06000 FSC MQ,1
06100 FADRM MQ,ROT6
06200 FADRM MQ,TH+5
06300 JRST THS]
06400 MOVN MQ,MQ
06500 CAMG TAC1,MQ
06600 JRST INCROT
06700 JRST THS]
06800 EXON: MOVEM TAC1,TH(I) ;THETA
06900 THS: CAILE I,2
07000 JRST[ MOVE AC,TH(I)
07100 FSBR AC,THP(I)
07200 FDVR AC,TDF
07300 MOVEM AC,TD(I)
07400 JRST SERVO]
07500 IFN REPORT,<
07600 MOVE MQ,TH(I)
07700 FSBR MQ,T0(I)
07800 PUSH DATA,MQ
07900 >
00100 IFE USER,<
00200 MOVE K,VCHAN(I)
00300 NVEL: PUSHJ P,PREAD
00400 LDB AC,SNUM
00500 ANDI DACVAL,7777
00600 ADDI AC,(DACVAL)
00700 TRNE VZERO
00800 MOVEM AC,VZ(I)
00900 SUB AC,VZ(I)
01000 FSC AC,216
01100 FMPR AC,VSCALE(I)
01200 IFN TACH,<
01300 TRNE VZERO
01400 SETZM VDTH(I)
01500 FADRM AC,VDTH(I)
01600 >
01700 MOVEM AC,TD(I)
01800 >
01900 XLIST
02000 SUBTTL SPACEWAR CODE SERVO CALC. LOU PAUL
02100 LIST
00100 SERVO: TRNN RUN
00140 JRST[ SOJGE I,RSTRT
00170 POPJ P,]
00200 SERVL: MOVE TAC,TH(I)
00300 FSBR TAC,T0(I) ;POSITION ERROR
00400 MOVEM TAC,ET0(I)
00500 TRNE FINAL
00600 JRST NULL ;MODIFY THETA BY INTEGRAL TERM
00700 MOVE TAC1,T0(I)
00800 FSBR TAC1,T0P(I)
00900 FDVR TAC1,TDF
01000 MOVE AC,TAC1
01100 FSBR AC,TDP(I)
01200 MOVEM TAC1,TDP(I)
01300 FDVR AC,TDF
01400 MOVEM AC,TDD(I)
01500 MODT0: MOVE MQ,CII(I)
01600 FMPR AC,MQ
01700 HRRZ K,BMASK(I)
01800 TDNN K,FBI
01900 JRST [ PDIR:SETZM ET0(I)
02000 JRST NOBACK]
02100 FMPR TAC,KI(I)
02200 FMPR MQ,MQ
02300 FDVR TAC,MQ
02400 FADRM TAC,ERRINT(I)
02500 IFE STEP,<
02600 MOVN TAC,TD(I)
02700 FADR TAC,TAC1
02800 >
02900 IFN STEP,<MOVN TAC,TD(I)>
03000 FMPR TAC,KV(I) ;VELOCITY GAIN
03100 FADR AC,TAC
03200 MOVN TAC,ET0(I)
03300 FMPR TAC,KE(I) ;ERROR GAIN
03400 FDVR TAC,CII(I)
03500 FADR AC,TAC
03600
03700 FADR AC,ERRINT(I)
03800
03900 NOBACK: CAIE I,2
04000 FMPR AC,[IRAD:0.0174532925] ;JOINT 3 IS IN INCHES
04100 MOVEM AC,TORE(I)
04200 FADR AC,CI(I) ;GRAVITY TERM
04300 MOVEM AC,T(I) ;ERROR CORRECTION TORQUE
04400 XLIST
04500 SUBTTL SPACEWAR CODE DRIVE CALC. LOU PAUL
04600 LIST
00100 DRIVE:
00200 IFN REPORT,<PUSH DATA,[<SIXBIT/DAC/>+6]>
00300 LS0: TDNN DATWD,BMASK(I)
00400 JRST ISP
00500 MOVE MQ,TD(I)
00600 JUMPN MQ,.+2
00700 MOVN MQ,ET0(I)
00800 FMPR MQ,T(I)
00900 CAIN I,1
01000 JRST[ HRRZ AC,FBI
01100 TDNN AC,BMASK(I)
01200 JRST .+1
01300 TRNE DROP
01400 JRST .+1
01500 SETZ MQ,
01600 JRST NOEX]
01700 JUMPL MQ,[ MOVM MQ,T(I)
01800 FSBR MQ,F0(I)
01900 JUMPL MQ,[ FDVR MQ,F0(I)
02000 FMPR MQ,V0(I)
02100 FSC MQ,1
02200 FADR MQ,V0(I)
02300 SKIPGE T(I)
02400 MOVN MQ,MQ
02500 JRST CEMF]
02600 MOVSI AC,(1.0)
02700 FSBR AC,PK(I)
02800 FMPR MQ,AC
02900 FMPR MQ,KM(I)
03000 FADR MQ,V0(I)
03100 SKIPG T(I)
03200 MOVN MQ,MQ
03300 JRST CEMF]
03400 SKIPN T(I)
03500 JRST[ SKIPN TD(I)
03600 JRST CEMF
03700 MOVE MQ,V0(I)
03800 SKIPGE TD(I)
03900 MOVN MQ,MQ
04000 JRST CEMF]
04100 JUMPE MQ,NOEX
04200 MOVE MQ,V0(I)
04300 SKIPGE T(I)
04400 MOVN MQ,MQ
04500 NOEX: MOVSI AC,(1.0)
04600 FADR AC,PK(I)
04700 FMPR AC,T(I)
04800 FMPR AC,KM(I)
04900 FADR MQ,AC
05000 CEMF:
05100 MOVE AC,EMF(I)
05200 FMPR AC,TD(I)
05300 MOVSI TAC1,(30.0)
05400 JUMPGE MQ,DRVLT
05500 MOVN AC,AC
05600 DRVLT: FSBR TAC1,AC ;Available drive voltage
05700 CAMGE TAC1,[1.0]
05800 JRST MAXDRV
05900 VELOK: MOVM AC,MQ
06000 FDVR AC,TAC1 ;AC= REL TIME ON
06100 FIX AC,211000 ;1=16
06200 CAML AC,[4000000]
06300 JRST DHO ;too much force stop the arm
06400 CAILE AC,776000
06500 MAXDRV: MOVEI AC,776000
06600 IFN REPORT+TRACK+USER+DEB,<
06700 MOVEM AC,MOTOR(I)
06800 SKIPGE MQ
06900 MOVNS MOTOR(I)
07000 >
07100 TRC AC,400000
07200 HRL AC,I
07300 SETDRV:
07400 IFN TRACK,<SKIPN WALK>
07500 DATAO WIDTH,AC
07600 TDZ DATWD,DMASK(I)
07700 JUMPGE MQ,ISP
07800 TDO DATWD,DMASK(I)
07900 ISP: SKIPE REV(I)
08000 TDC DATWD,DMASK(I)
08100 IFN REPORT,<PUSH DATA,MOTOR(I)>
08200 DATAO ARM,DATWD
08300 SOJGE I,RSTRT
08400 JFCL 10,DHO
08500 IFN TRACK,<SKIPN WALK>
00100 TRZ VZERO
00200 SETZM ASTP
00300 TRNE STP
00400 JRST[ MOVEI I,5
00500 MTL: MOVE MQ,TORE(I)
00600 FDVR MQ,F0(I)
00700 SKIPN TD(I)
00800 FSC MQ,-2
00900 FMPR MQ,STQ(I)
01000 FADRM MQ,ASTP
01100 SOJGE I,MTL
01200 MOVE AC,ASTP
01300 CAML AC,SDTQ
01400 JRST[ AOS AC,ASTPP
01500 CAIL AC,3
01600 JRST[ TRZ STP
01700 SUB P,[XWD 1,1]
01800 SETZM ERRINT
01900 MOVE AC,[XWD ERRINT, ERRINT+1]
02000 BLT AC,ERRINT+5
02100 JRST RUDONE]
02200 POPJ P,]
02300 SETZM ASTPP
02400 POPJ P,]
02500 POPJ P,
02600
02700 NULL: SETZB AC,TAC1
02800 TLNN DATWD,NNUL
02900 TRNE WOB
03000 SOJA J,MODT0
03100 TDNN DATWD,GMASK(I)
03200 SOJA J,DRIVE
03300 MOVE MQ,FBI
03400 TDNN MQ,GMASK(I)
03500 SOJA J,PDIR
03600 MOVM MQ,TAC ;|POSITION ERROR|
03700 CAMLE MQ,ERR(I) ;COMPARE POSITION ERROR
03800 JRST MODT0
03900 MOVM MQ,TD(I)
04000 CAMLE MQ,ERR(I)
04100 JRST MODT0
04200 SO: TDZ DATWD,BMASK(I)
04300 IFN REPORT+TRACK+USER+DEB,<SETZM MOTOR(I)>
04400 DATAO ARM,DATWD
04500 HRLZ MQ,I
04600 TRC MQ,400000
04700 DATAO WIDTH,MQ
04800 SOJA J,DRIVE
04900 POPJ P,
05000
05100 XLIST
05200 SUBTTL SPACEWAR CODE LOU PAUL
05300 LIST
00100 NXTH: MOVE AC,[XWD T0,T0P]
00200 BLT AC,T0P+5
00300 TRNE WOB
00400 JRST[ MOVEI I,2
00500 WL1: SOSGE J,WOBCNT(I)
00600 JRST[ MOVEI J,=19
00700 MOVEM J,WOBCNT(I)
00800 JRST WL2]
00900 WL2: MOVE AC,SIN(J)
01000 FMPR AC,WOBMAG
01100 FADRM AC,TFF+3(I)
01200 SOJGE I,WL1
01300 JRST .+1]
01400 TRNE DROP
01500 JRST[ MOVEI I,5
01600 OL: MOVE AC,DELTH(I)
01700 FMPR AC,TDF
01800 FADRM AC,DTH(I)
01900 SOJGE I,OL
02000 JRST JALS]
02100 NTH:
02200 TRNE INCREM
02300 JRST[ MOVE MQ,ETIME
02400 ADDB MQ,TICKS
02500 CAML MQ,NTICKS
02600 JRST[ TRZ INCREM
02700 SKIPN TP
02800 TRO FINAL
02900 MOVEI AC,=600
03000 MOVEM AC,COUNT
03100 MOVEI I,5
03200 FIL: MOVE AC,DELTH(I)
03300 FADRB AC,DTH(I)
03400 FADR AC,TFF(I)
03500 MOVEM AC,T0(I)
03600 SETZM DELTH(I)
03700 SOJGE I,FIL
03800 POPJ P,]
03900 SETZ I,
04000 DIV MQ,NTICKS
04100 ASH MQ,-10
04200 FSC MQ,200
04300 MOVSI AC,(6.0)
04400 FMPR AC,MQ
04500 FADR AC,[-15.0]
04600 FMPR AC,MQ
04700 FADR AC,[10.0]
04800 FMPR AC,MQ
04900 FMPR MQ,MQ
05000 FMPR MQ,AC
05100 MOVEI I,5
05200 LDC: MOVE AC,DELTH(I)
05300 FMPR AC,MQ
05400 FADR AC,DTH(I)
05500 FADR AC,TFF(I)
05600 MOVEM AC,T0(I)
05700 SOJGE I,LDC
05800 POPJ P,]
05900 JALS: MOVEI I,5
06000 JAL: MOVE AC,DTH(I)
06100 FADR AC,TFF(I)
06200 MOVEM AC,T0(I)
06300 SOJGE I,JAL
06400 POPJ P,
06500
00100 EVAL: MOVEI I,5
00200 EL: MOVE J,TP(I) ;POINTS TO KOE5
00300 JUMPE J,NE
00400 MOVE MQ,ETIME
00500 ADDB MQ,TJ(I)
00600 CAML MQ,TN(I) ;NUMBER OF TICKS THIS SEGMENT
00700 JRST[ ;END OF SEGMENT
00800 CAIN I,5
00900 JRST[ ;JOINT 6 HAS CONTROL WORD
01000 MOVE TAC,[XWD NC,PC]
01100 BLT TAC,PC+=11 ;UPDATE PC
01200 MOVE TAC,TICKS
01300 CAMGE TAC,NTICKS
01400 TRO INCREM
01500 LDB TAC,[POINT 3,1(J),2] ;LEVEL
01600 JUMPN TAC,[ ;SWITCH POINT
01700 SKIPG LOOP(TAC)
01800 JRST[ ;INITIALIZE LOOP
01900 LDB AC,[POINT 15,1(J),17]
02000 MOVEM AC,LOOP(TAC) ;COUNT
02100 JRST SETALT]
02200 SOSLE LOOP(TAC) ;IN LOOP
02300 SETALT: TRO ALT
02400 JRST GETNXT]
02500 JRST GETNXT]
02600 GETNXT: TRNE ALT
02700 JRST[ LDB J,[POINT 9,(J),8] ;ALT POINTER
02800 JRST GOT]
02900 LDB J,[POINT 9,(J),17] ;NEXT POINTER
03000 JUMPE J,[SETZM TP(I)
03100 TRO FINAL
03200 MOVEI AC,=600
03300 MOVEM AC,COUNT
03400 MOVE TAC,[XWD NC,CI]
03500 BLT TAC,CI+=11
03600 MOVE AC,A4(I)
03700 ADD AC,A3(I)
03800 ADD AC,A2(I)
03900 ADD AC,A1(I)
04000 ADD AC,A0(I)
04100 XOR AC,SC(I)
04200 FSC AC,0
04300 MOVEM AC,TFF(I)
04400 JRST NE]
04500 GOT: ADDI J,(CBUF)
04600 MOVEM J,TP(I)
04700 SUB MQ,TN(I) ;MICRO SEC INTO NEW SEGMENT
04800 MOVEM MQ,TJ(I) ;INITIALIZE
04900 HRRZ AC,(J)
05000 ASH AC,16
05100 MOVEM AC,TN(I)
05200 CAIN I,5
05300 JRST[
05400 HRRZ TAC,1(J)
05500 ADDI TAC,(CBUF)
05600 MOVEI MQ,14(TAC)
05700 HRLI TAC,(TAC)
05800 HRRI TAC,NC
05900 BLT TAC,NC+=11
06000 MOVEI K,5
06100 AAI: MOVE TAC,MOTARM(K)
06200 FADRM TAC,NC+6(K)
06300 SOJGE K,AAI
06400 MOVEI K,5
06500 MOVE MQ,(MQ)
06600 FTF: MOVE TAC,GMASK(K)
06700 TDNN TAC,FBI
06800 JRST[ TDNN TAC,MQ
06900 JRST FNF
07000 MOVE AC,TH(K)
07100 MOVEM AC,T0(K)
07200 FSBR AC,TFF(K)
07300 MOVEM AC,DTH(K)
07400 MOVNM AC,DELTH(K)
07500 MOVE AC,TN+5
07600 ASH AC,16
07700 MOVEM AC,NTICKS
07800 SETZM TICKS
07900 TRO INCREM
08000 JRST FNF]
08100 TDNN TAC,MQ
08200 JRST[ MOVE AC,TDD(K)
08300 CAIE K,2
08400 FMPR AC,IRAD
08500 FMPR AC,CII(K)
08600 FADR AC,T(K)
08700 MOVEM AC,CI(K)
08800 JRST FNF]
08900 FNF: SOJGE K,FTF
09000 HRRZM MQ,FBI
09100 MOVEI K,=11
09200 DELC: MOVE AC,NC(K)
09300 FSBR AC,PC(K)
09400 MOVEM AC,DCI(K)
09500 SOJGE K,DELC
09600 JRST DDELC]
09700 DDELC: HLRE AC,-3(J)
09800 MOVEM AC,A4(I)
09900 HRRE AC,-3(J)
10000 MOVEM AC,A3(I)
10100 HLRE AC,-2(J)
10200 MOVEM AC,A2(I)
10300 HRRE AC,-2(J)
10400 MOVEM AC,A1(I)
10500 HLLZ AC,-1(J)
10600 MOVEM AC,SC(I)
10700 HRRE AC,-1(J)
10800 MOVEM AC,A0(I)
10900 MOVE MQ,TJ(I)
11000 JRST ELL]
11100 ELL: DIV MQ,TN(I)
11200 CAIN I,5
11300 JRST[ MOVEI K,=11
11400 HLRE TAC,MQ
11500 FSC TAC,211
11600 DECC: MOVE AC,DCI(K)
11700 FMPR AC,TAC
11800 FADR AC,PC(K)
11900 MOVEM AC,CI(K)
12000 SOJGE K,DECC
12100 JRST .+1]
12200 MOVE AC,A4(I)
12300 MUL AC,MQ
12400 ADD AC,A3(I)
12500 MUL AC,MQ
12600 ADD AC,A2(I)
12700 MUL AC,MQ
12800 ADD AC,A1(I)
12900 MUL AC,MQ
13000 ADD AC,A0(I)
13100 XOR AC,SC(I)
13200 FSC AC,0
13300 MOVEM AC,TFF(I)
13400 CAIN I,5
13500 JRST[ MOVE AC,TFF+5
13600 FSBR AC,T0+5
13700 MOVSI MQ,(180.0)
13800 CAML AC,MQ
13900 JRST[ INCT0: FSC MQ,1
14000 FADRM MQ,T0+5
14100 JRST .+1]
14200 MOVN MQ,MQ
14300 CAMG AC,MQ
14400 JRST INCT0
14500 JRST .+1]
14600 NE: SOJGE I,EL
14700 TRZ ALT
14800 POPJ P,
14900
00100 DHO: AOJ I, ;DISASTER HAS OCCURED
00200 LSH I,3 ;JOINT NUMBER
00300 IORI I,EXER
00400 MOVEM I,TRAJER
00500 POP P,I
00600 ZITO: SETZM ERRINT
00700 MOVE AC,[XWD ERRINT,ERRINT+1]
00800 BLT AC,ERRINT+5
00900
01000 TOFF: MOVE AC,STKPTR
01100 MOVEM AC,ERRSTK
01200 MOVEI L,1000
01300 TRNE RONLY
01400 JRST READED
01500 TRZ RUN+FINAL+DROP+INCREM+HCL+STP+WOB ;STOP THE ARM
01600 SETZM TP
01700 MOVE AC,[XWD TP,TP+1]
01800 BLT AC,TP+5
01900 PUSHJ P,SETSET
02000 MOVNXT: AOS AC,STKPTR
02100 MOVNX: SOJL L,[ LE:
02200 MOVEI TAC,LOOPER
02300 MOVEM TAC,TRAJER
02400 JRST PW]
02500 HLRE TAC,@STKPTR
02600 CAIN TAC,3 ;IS IT A WAIT
02700 JRST MOVNXT
02800 CAIN TAC,SKPERR
02900 JRST[ HRRZ TAC,(AC)
03000 CAMN TAC,TRAJER
03100 JRST[ AOS STKPTR
03200 JRST NEXT]
03300 JRST MOVNXT]
03400 CAIN TAC,SKPNER
03500 JRST[ HRRZ TAC,(AC)
03600 CAME TAC,TRAJER
03700 JRST[ AOS STKPTR
03800 JRST MOVNXT]
03900 JRST NEXT]
04000 CAIN TAC,SKPSER
04100 JRST[ LDB MQ,[POINT 3,(AC),35]
04200 LDB TAC,[POINT 3,TRAJER,35]
04300 CAIN TAC,(MQ)
04400 JRST[ HRRZ TAC,(AC)
04500 ANDI TAC,777770
04600 TDNE TAC,TRAJER
04700 JRST[ AOS STKPTR
04800 JRST NEXT]
04900 JRST MOVNXT]
05000 JRST MOVNXT]
05100 CAIN TAC,JMPREL
05200 JRST[ HRRE TAC,(AC)
05300 ADDI AC,(TAC)
05400 HRRM AC,STKPTR
05500 JRST MOVNX]
05600 PW: CAIL AC,BUF
05700 HRRM AC,JUMPBK
05800 MOVEI AC,WAITIN
05900 MOVEM AC,STKPTR
06000 MOVEI AC,3
06100 MOVEM AC,FUNCT
06200 IFN TRACK,<SKIPN WALK>
06300 DATAO ARM,[2] ;STOP THE ARM
06400 IFN REPORT,<PUSH DATA,[0]>
06500 READED: TRO DTST
06600 IFN DEB,<
06700 MOVEM 17,ACSAV+17
06800 MOVEI 17,ACSAV
06900 BLT 17,ACSAV+16
07000 >
07100 JRST SWDONE
07200
00100 NEXT: TRNE RUN
00200 JRST[ SETZM FUNCT
00300 JRST NXTJIF]
00400 MOVEI L,1000
00500 MOVE AC,FUNCT
00600 CAIE AC,6 ;SET TOUCH
00700 JRST[ MOVE TAC,SOTCHS
00800 MOVEM TAC,SOTCH
00900 TRZ STCH
01000 JUMPE TAC,.+1
01100 TRO STCH
01200 JRST .+1]
01300 IFN TRACK,<SKIPN WALK>
01400 MOVEI DATWD,2
01500 DATAO ARM,DATWD ;STOP THE ARM
01600 INCPIC: AOS AC,STKPTR
01700 PICKUP: SOJL L,LE
01800 HLRE TAC,@STKPTR
01900 CAIN TAC,JMPABS
02000 JRST[JMPA:HRRZ TAC,@STKPTR
02100 MOVEM TAC,STKPTR
02200 HLRZ TAC,@STKPTR
02300 CAIN TAC,3
02400 JRST INCPIC
02500 JRST PICKUP]
02600 CAIN TAC,SKPERR
02700 JRST[ HRRZ TAC,@STKPTR
02800 CAMN TAC,TRAJER
02900 AOS STKPTR
03000 JRST INCPIC]
03100 CAIN TAC,SKPNER
03200 JRST[ HRRZ TAC,@STKPTR
03300 CAME TAC,TRAJER
03400 AOS STKPTR
03500 JRST INCPIC]
03600 CAIN TAC,SKPSER
03700 JRST[ LDB MQ,[POINT 3,@STKPTR,35]
03800 LDB TAC,[POINT 3,TRAJER,35]
03900 CAIN TAC,(MQ)
04000 JRST[ HRRZ TAC,@STKPTR
04100 ANDI TAC,777770
04200 TDNE TAC,TRAJER
04300 AOS STKPTR
04400 JRST INCPIC]
04500 JRST INCPIC]
04600 CAIN TAC,JMPREL
04700 JRST[ HRRE TAC,@STKPTR
04800 ADD TAC,STKPTR
04900 HRRM TAC,STKPTR
05000 JRST PICKUP]
05100 SETZM TRAJER
05200 MOVEI I,100
05300 MOVEM I,COUNT
05400 JUMPL TAC,[TRO RUN+VZERO
05500 SETCA TAC,
05600 MOVEM TAC,FUNCT
05700 AOS DOING ;INCREASE TRAJECTORY NUMBER
05800 HLRZ 2,(CBUF)
05900 ASH 2,16
06000 MOVEM 2,NTICKS ;RUN TIME
06100 MOVEI 2,=1800
06200 MOVEM 2,COUNT
06300 SETZM LOOP
06400 MOVE TAC,[XWD LOOP,LOOP+1]
06500 BLT TAC,LOOP+9
06600 MOVE DATWD,777(CBUF)
06700 HRRZM DATWD,FBI
06800 MOVEI I,5
06900 MOVEI K,34
07000 SUL: SUBI K,4
07100 HRLZM K,TJ(I)
07200 HRLZM K,TN(I)
07300 MOVEI TAC,TJ(I)
07400 MOVEM TAC,TP(I)
07500 TDNE DATWD,BMASK(I)
07600 TDO DATWD,BMASK(I)
07700 SETZM DTH(I)
07800 SOJGE I,SUL
07900
08000 HRLZI TAC,763(CBUF)
08100 HRRI TAC,NC
08200 BLT TAC,NC+=11
08300 MOVEI I,5
08400 SAAI: MOVE TAC,MOTARM(I)
08500 FADRM TAC,NC+6(I)
08600 SOJGE I,SAAI
08700 SETZM ETIME
08800 PUSHJ P,EVAL
08900 TRZ INCREM
09000 MOVEI I,5
09100 MOVBK: MOVE AC,TH(I)
09200 MOVEM AC,T0(I)
09300 FSBR AC,TFF(I)
09400 CAIN I,5
09500 JRST[ MOVSI MQ,(180.0)
09600 CAML AC,MQ
09700 JRST[SETROT:FSC MQ,1
09800 MOVN MQ,MQ
09900 FADRM MQ,TH+5
10000 FADRM MQ,ROT6
10100 JRST MOVBK]
10200 MOVN MQ,MQ
10300 CAMG AC,MQ
10400 JRST SETROT
10500 JRST ADDTF]
10600 ADDTF: MOVEM AC,DTH(I)
10700 MOVN AC,AC
10800 FADRM AC,DELTH(I)
10900 SETZM TD(I)
11000 SOJGE I,MOVBK
11100 SETZM TICKS
11200 HLRE TAC,@STKPTR
11300 JRST MARK]
11400 MOVEM TAC,FUNCT
11500 CAIN TAC,3 ;IS IT A WAIT
11600 JRST[ MOVE TAC,STKPTR
11700 CAIL TAC,BUF
11800 HRRM TAC,JUMPBK
11900 MOVEI TAC,WAITIN
12000 MOVEM TAC,STKPTR
12100 IFN REPORT,<PUSH DATA,[0]>
12200 TRO DTST
12300 PUSHJ P,SWDONE]
12400 MARK:
12500 IFN REPORT,<
12600 PUSH DATA,[<SIXBIT/NEXT/>+1]
12700 MOVE TAC,FUNCT
12800 HRL TAC,0
12900 PUSH DATA,TAC
13000 >
13100
13200 ; JRST DISP
13300 SWDONE:
13400 MOVEM BITSAV
13500 MOVEM DATWD,DATWDS
13600 MOVEM CBUF,CBUFS
13700 IFN REPORT+TRACK,<
13800 MOVEM DATA,DATPT
13900 >
14000 IFE USER,<
14100 IFN TRACK,<
14200 SKIPE WALK
14300 JRST @STRADR-1
14400 >
14500 ; CONO 4,200 ;TURN ON THE PI'S
14600 CALLI 400024
14700 >
14800 IFN USER,<
14900 JRST @STRADR-1
15000 >
15100
15200 SETSET: MOVEI I,5
15300 TCHK: MOVE J,TP(I)
15400 JUMPE J,ATEND
15500 SETZM TJ(I)
15600 SETZM TN(I)
15700 GNN: LDB J,[POINT 9,(J),17]
15800 ADDI J,(CBUF)
15900 CAIN J,(CBUF)
16000 JRST[ MOVEM J,TP(I)
16100 JRST ATEND]
16200 JRST GNN
16300 ATEND: SOJGE I,TCHK
16400 PUSHJ P,EVAL
16500 MOVEI I,5
16600 FDTH: MOVE AC,TH(I)
16700 MOVEM AC,T0(I)
16800 FSBR AC,TFF(I)
16900 MOVEM AC,DTH(I)
17000 SETZM DELTH(I)
17100 SETZM TDP(I)
17200 SETZM TDD(I)
17300 SOJGE I,FDTH
17400 POPJ P,
17500
00100 PREAD:
00200 IFN TRACK,<
00300 SKIPE WALK
00400 JRST[GNPR:AOBJP DATA,[ MOVE AC,[IOWD DBL,DATO]
00500 MOVEM AC,DATPT
00600 MOVE DATA,DATPT
00700 SETZ TAC,
00800 INPUT 15,1
00900 JRST GNPR]
01000 MOVE DACVAL,(DATA)
01100 JRST @READFN]
01200 >
01300 MOVEI TAC,10
01400 MOVEM TAC,DATMSD
01500 DACRED: SOSGE DATMSD
01600 JRST[REDER: MOVEI TAC,READER
01700 MOVEM TAC,TRAJER
01800 JRST TOFF]
01900 DACST: CONO DB,4250
02000 CONO AD,(K)
02100 NREAD: MOVEI TAC,30
02200 CONSO DB,1000
02300 SOJGE TAC,.-1
02400 JUMPL TAC,[DACDIE:CONO AD,4000(K) ;STOP DAC
02500 TRO REREAD
02600 IFN DEB,<MOVEM DACVAL,DACERR>
02700 MOVEI TAC,12
02800 WRH: SOJGE TAC,WRH
02900 JRST DACRED]
03000 DATAI DB,DACVAL
03100 CONSZ DB,10000
03200 JRST DACDIE
03300 XOR DACVAL,SBMSK
03400 IFN TRACK,<PUSH DATA,DACVAL>
03500 JRST @READFN
03600 FREAD: ADDI K,770000
03700 IFN TRACK,<SKIPN WALK>
03800 CONO AD,4000(K) ;STOP AD ON NEXT CHANNEL
03900 POPJ P,
04000 READFN: FREAD
04100
04200 XLIST
04300 SUBTTL CONSTANTS LOU PAUL
04400 LIST
00100 NON: POINT 12,INNER(AC),11
00200 POINT 12,INNER(AC),23
00300 POINT 12,INNER(AC),35
00400 POINT 12,OUTER(AC),11
00500 POINT 12,OUTER(AC),23
00600 POINT 12,OUTER(AC),35
00700 ERR: 0.05
00800 0.05
00900 0.01
01000 0.1
01100 0.1
01200 0.7
01300 TH: BLOCK 6 ;THE NEXT 7 LOCATIONS ARE BLOCK TRANSFERED.
01400 HAND: 3.0
01500 TDD: BLOCK 6
01600 ERRINT: 0
01700 0
01800 0
01900 0
02000 0
02100 0
02200 DTH: BLOCK 6
02300 TD: BLOCK 6
02400 T0P: BLOCK 6
02500 TDP: BLOCK 6
02600 ET0: BLOCK 6
02700 T0: -150.0
02800 -75.0
02900 14.0
03000 -90.0
03100 60.0
03200 0.0000
03300 TFF: -150.0
03400 -75.0
03500 14.0
03600 -90.0
03700 60.0
03800 0.0000
03900 DELTH: BLOCK 6 ;THIS AND THE NEXT ARE BLT ED TOGETHER
04000 NTICKS: 0
04100 DTHS: BLOCK =30
04200 TORE: BLOCK 6
04300 T: BLOCK 6
04400 IFN USER+REPORT+TRACK+DEB,<MOTOR: BLOCK 6>
04500 FBI: 0
04600 VZ: BLOCK 3
04700 IFN TACH,<
04800 VDTH: BLOCK 3
04900 >
05000 THP: BLOCK 6
05100 MOTARM: 700000.0
05200 800000.0
05300 5000.0
05400 3000.0
05500 3000.0
05600 4000.0
05700 STQ: BLOCK 6
05800 SDTQ: 0
05900 ASTP: 0
06000 ASTPP: 0
06100 PC: BLOCK 14
06200 DCI: BLOCK 6
06300 DCII: BLOCK 6
06400 CI: 0
06500 0
06600 0
06700 0
06800 0
06900 0
07000 CII: 500000.0
07100 700000.0
07200 10000.0
07300 100000.0
07400 100000.0
07500 1000.0
07600 NC: BLOCK =12
07700 IFN DEB,<DACERR: 0>
07800 REFTR: 0
07900 ETIME: =8888
08000 TDF: 0.5
08100 IFN DEB,<
08200 ETIM: 0
08300 ACSAV: BLOCK 20
08400 >
08500 PDL: DHO
08600 BLOCK PDLL
08700 LTIME: 0
08800 FUNCT: 0
08900 ROT6: 0
09000 TRAJER: 0
09100 DOING: 0
09200 DATMSD: 0
09300 CBUFS: 0
09400 DATWDS: 0
09500 SNUM: POINT 12,DACVAL,23
09600 SBMSK: 400040004000
09700 REV: 0
09800 0
09900 -1
10000 0
10100 -1
10200 -1
10300 DMASK: 400000
10400 100000
10500 20000
10600 4000
10700 1000
10800 200
10900 BMASK: XWD 400000,200000
11000 XWD 200000, 40000
11100 XWD 100000, 10000
11200 XWD 40000, 2000
11300 XWD 20000, 400
11400 XWD 10000, 100
11500 GMASK: 200000
11600 40000
11700 10000
11800 2000
11900 400
12000 100
12100 VCHAN: 52B23
12200 53B23
12300 54B23
12400 CHAN: 55B23
12500 56B23
12600 57B23
12700 60B23
12800 61B23
12900 GAIN: MOVEI I,5
13000 SETGN: MOVE AC,KV(I)
13100 FMPR AC,AC
13200 FSC AC,-2
13300 MOVEM AC,KE(I)
13400 FMPR AC,KV(I)
13500 FSC AC,-4
13600 MOVNM AC,KI(I)
13700 SOJGE I,SETGN
13800 MOVE 1,[SIXBIT/$ARM$/]
13900 CALLI 1,400002
14000 MOVE I,RET
14100 MOVEM I,GAIN
14200 JRST GAIN
14300 RET: POPJ P,
14400 BLOCK 11
14500 0
14600 WAITIN: XWD 3,0
14700 JUMPBK: XWD JMPABS,WAITIN
14800 STKPTR: WAITIN
14900 ERRSTK: 0
15000 BITSAV: 0
15100 COUNT: 0
15200 STWT: 0
15300 HCNT: 0
15400 TP: 0
15500 0
15600 0
15700 0
15800 0
15900 0
16000 TJ: BLOCK 6
16100 LOOP: BLOCK 10
16200 TN: BLOCK 6
16300 SC: BLOCK 6
16400 A0: BLOCK 6
16500 A1: BLOCK 6
16600 A2: BLOCK 6
16700 A3: BLOCK 6
16800 A4: BLOCK 6
16900 BLOCKS: 0
17000 NXTBUF: 0
17100 BUF: 0
17200 BLOCK 1000
17300 BUF2: 0
17400 BLOCK 1000
17500 IFN ADJUST<
17600 ADJI: -1
17700 ADJE: 0
17800 ADJV: 0
17900 ADJIF: 0
18000 FACTOR: BLOCK 3
18100 >
18200 IFN REPORT+TRACK,<
18300 DATIWD: 0
18400 0
18500 DATPT: 0
18600 DATO: BLOCK DBL+100
18700 >
18800 IFN DYNAMICS,<
18900 DDAT: <SIXBIT/FORD/>+6
19000 FOR: BLOCK 6
19100 <SIXBIT/BACK/>+6
19200 BAK: BLOCK 6
19300 >